import 'package:flutter/cupertino.dart';

String sayName(String name) {
  return "hi, $name";
}

/// 在Dart中，参数类型是可选，可以省略显式的类型，但仍然建议显式指定类型：
String sayName1(name) {
  return "hi, $name";
}

/// 简写方式
String sayName3(name) => "hi, $name";

///可选命名可选参数
void sayName4({name, @required age = 0}) {
  print(" name:$name age:$age");
}

///可选位置参数
void sayName5([name, age]) {
  print(" 名字:$name 年龄:$age");
}


 void printElement(int element) {
  print(element);
}


///箭头函数
///
///函数赋值给一个变量
var loudify = (msg) => '!!! ${msg.toUpperCase()} !!!';

///
typedef bool CALLBACK();

void test(CALLBACK cb){
  print(cb());
}

//不指定返回类型，此时默认为dynamic，不是bool
isNoble(int atomicNumber) {
  return true;
}

void main() {

  print(sayName("张三"));
  print(sayName1("李四"));
  print(sayName3("王五"));

  sayName4(name: "周大生", age: 48);
  sayName4();
  sayName5("大白", 11);
  sayName5();



  var list = [1, 2, 3];
// 将 printElement 函数作为参数传递。
  list.forEach(printElement);

  assert(loudify('hello') == '!!! HELLO !!!');


  // test(isNoble)//报错
}
